'''
Created on 20/06/2011

@author: dolalima
'''

from ArvoreBinaria import *
from Comercio import Comercio
class ArvoreComercio(RedBlackTree):
    '''
    classdocs
    '''


    def __init__(self,valor=None):
        '''
        Constructor
        '''
        RedBlackTree.__init__(self)
        self.nulo.set_dado(Comercio(0,0,0,0,0,0))
        
    def pesquisar(self, visitador, valor):
        if(visitador == None):
            visitador = self.raiz
        if(visitador == self.nulo or valor == visitador.dado().getCodigo()):
            return visitador
        if(valor < visitador.dado().getCodigo()):
            return self.pesquisar(visitador.esq(), valor)
        else:
            return self.pesquisar(visitador.dir(), valor)
    
    def inserir(self, nodo):
        nodo.set_cor(self.red)
        nodo.set_esq(self.nulo)
        nodo.set_dir(self.nulo)
        if(self.raiz == None):
            self.raiz = nodo
            self.raiz.set_cor(self.black)
            self.raiz.set_pai(self.nulo)
            return
        y = None
        x = self.raiz
        while x != self.nulo:     
            y = x
            if(nodo.dado().getCodigo() < x.dado().getCodigo()):
                x = x.esq()
            else:
                x = x.dir()
        
        nodo.set_pai(y)
        if(y == None):
            self.raiz = nodo
        elif(nodo.dado().getCodigo() < y.dado().getCodigo()):
            y.set_esq(nodo)
        else:
            y.set_dir(nodo)
        
        nodo.set_esq(self.nulo)
        nodo.set_dir(self.nulo)
        nodo.set_cor(self.red)
        
        self.insert_fixup(nodo)
    
    
    def mostrar(self, visitador = None):
        if(visitador == None):
            visitador = self.raiz
        
        if(visitador != self.nulo):
            print(self.mostrar(visitador.esq()))
            print(self.mostrar(visitador.dir()))
        return str(visitador.dado().getNumero()) + " " + visitador.cor()        